package com.itany.corejava.code17_设计模式.动态代理;

import java.lang.reflect.Proxy;

/**
 * @author 石小俊
 * @date 2023年06月02日 16:04
 */
public class Test {

    public static void main(String[] args) {
        // 参数一:定义代理的类的类加载器。即:目标类的类加载器
        // 参数二:代理的类要实现的接口列表。即:目标类实现的接口列表
        // 参数三:指派方法调用的调用处理程序。即:代理类的方法的具体实现
            // 其参数是InvocationHandler接口,因此我们需要对该接口做具体实现
        UserService userService = (UserService) Proxy.newProxyInstance(
                UserServiceImpl.class.getClassLoader(),
                UserServiceImpl.class.getInterfaces(),
                new LogInvocationHandler(new UserServiceImpl())
        );

        userService.register("admin","123456","13812345678","江苏-南京");
        System.out.println("**********************");
        userService.login("admin","123456");
        System.out.println("**********************");
        SomeService someService = (SomeService) Proxy.newProxyInstance(
                SomeServiceImpl.class.getClassLoader(),
                SomeServiceImpl.class.getInterfaces(),
                new LogInvocationHandler(new SomeServiceImpl())
        );
        someService.doSome();
        System.out.println("**********************");
        someService.doOther();
    }

}
